//
//  ViewController.m
//  XSMultipleNet
//
//  Created by xingshuai on 2021/8/12.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = UIColor.orangeColor;
    
    [self requestLiveNetworkData];
    
}

// 模拟顺序执行多个接口
-(void)requestLiveNetworkData {
    //创建串行队列
    dispatch_queue_t customQuue = dispatch_queue_create("com.live.network", DISPATCH_QUEUE_SERIAL);
    //创建信号量并初始化总量为1
    dispatch_semaphore_t semaphoreLock = dispatch_semaphore_create(0);
    //添加任务
    dispatch_async(customQuue, ^{
        // 请求第一个接口数据
        [self requestLiveOneDitiDataSuccess:^{
            //dispatch_semaphore_signal发送一个信号，让信号总量加1,相当于解锁
            dispatch_semaphore_signal(semaphoreLock);
        }];
        
        // 相当于加锁
        dispatch_semaphore_wait(semaphoreLock, DISPATCH_TIME_FOREVER);
        // 请求第二个接口数据
        [self requestLiveTwoDitiDataSuccess:^{
            //dispatch_semaphore_signal发送一个信号，让信号总量加1,相当于解锁
            dispatch_semaphore_signal(semaphoreLock);
        }];
        
        // 相当于加锁
        dispatch_semaphore_wait(semaphoreLock, DISPATCH_TIME_FOREVER);
        // 请求第三个接口数据
        [self requestLiveThreeDitiDataSuccess:^{
            //dispatch_semaphore_signal发送一个信号，让信号总量加1,相当于解锁
            dispatch_semaphore_signal(semaphoreLock);
        }];
        
        // 第四个接口数据
        // 第五个接口数据
        // ......
        
        // 所有任务都执行完成刷新操作
        dispatch_semaphore_wait(semaphoreLock, DISPATCH_TIME_FOREVER);
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"所有任务完成");
        });
    });
}

// 模拟请求第一个接口
-(void)requestLiveOneDitiDataSuccess:(void (^)(void))success {
    // 延时执行测试一下是否会顺序执行
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"我是第一个接口执行完了");
        
        // 执行完成
        if (success) {
            success();
        }
    });
}

// 模拟请求第二个接口
-(void)requestLiveTwoDitiDataSuccess:(void (^)(void))success {
    // 延时执行测试一下是否会顺序执行
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"我是第二个接口执行完了");
        
        // 执行完成
        if (success) {
            success();
        }
    });
}

// 模拟请求第三个接口
-(void)requestLiveThreeDitiDataSuccess:(void (^)(void))success {
    // 延时执行测试一下是否会顺序执行
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"我是第三个接口执行完了");
        
        // 执行完成
        if (success) {
            success();
        }
    });
}


@end
